/**
 * 单选数组，点击事件
 * @param {单选组结果集} resultArr 
 * @param {单选组数据} tempOptionArr 
 * @param {当前选中状态} checkFlag 
 * @param {当前点击项的value} val 
 */
function radioGroupClick(resultArr, tempOptionArr, checkFlag, val) {
    if (checkFlag) {
        // 单选数组中，选中时点击
        // 因为是单选，需要变为false
        // 清空结果集
        resultArr.length = 0
        // 遍历数组
        for (let i = 0; i < tempOptionArr.length; i++) {
            // 全部未选中
            tempOptionArr[i].check = false;
        }
    } else {
        // 单选数组中，未选中时点击
        // 放进结果集，因为是单选，需要其它变为false
        // 清空结果集
        resultArr.length = 0
        // 遍历数组
        for (let i = 0; i < tempOptionArr.length; i++) {
            var tempOption = tempOptionArr[i]
            // 若是当前点击的，则是选中状态，并放进结果集
            if (tempOption.value == val) {
                //当前点击的位置为true即选中
                tempOption.check = true;
                resultArr.push(tempOption);
            } else {
                // 若不是，则未选中状态
                tempOption.check = false;
            }
        }
    }
}

function radioGroupClickVal(tempOptionArr, checkFlag, val) {
    // 清空结果集
    var result = null;
    if (checkFlag) {
        // 单选数组中，选中时点击
        // 因为是单选，需要变为false
        // 遍历数组
        for (let i = 0; i < tempOptionArr.length; i++) {
            // 全部未选中
            tempOptionArr[i].check = false;
        }
    } else {
        // 单选数组中，未选中时点击
        // 放进结果集，因为是单选，需要其它变为false
        // 遍历数组
        for (let i = 0; i < tempOptionArr.length; i++) {
            var tempOption = tempOptionArr[i]
            // 若是当前点击的，则是选中状态，并放进结果集
            if (tempOption.value == val) {
                //当前点击的位置为true即选中
                tempOption.check = true;
                result = tempOption;
            } else {
                // 若不是，则未选中状态
                tempOption.check = false;
            }
        }
        console.info('result=' + JSON.stringify(result))
        return result;
    }
}


/**
 * 多选数组，点击事件
 * @param {多选组结果集} resultArr 
 * @param {多选组数据} tempOptionArr 
 * @param {当前选中状态} checkFlag 
 * @param {当前点击项的value} val 
 */
function multiGroupClick(resultArr, tempOptionArr, checkFlag, val) {
    if (checkFlag) {
        // 多选数组中，选中时点击
        // 从结果集中剔除，状态需要变为false
        // 清空结果集
        resultArr.length = 0
        // 遍历数组
        for (let i = 0; i < tempOptionArr.length; i++) {
            var tempOption = tempOptionArr[i]
            console.info('tempOption=' + JSON.stringify(tempOption))
            // 若是当前点击的，则变成未选中状态，并从结果集中剔除
            if (tempOption.value == val) {
                //当前点击的位置为true即选中
                tempOption.check = false;
            } else if (tempOption.check) {
                // 其它已选中项 放进结果集，这样顺序就一致了
                resultArr.push(tempOption);
            }
        }
    } else {
        // 多选数组中，未选中时点击
        // 放进结果集，状态需要变为true
        // 清空结果集
        resultArr.length = 0
        // 如果当前选中项 是 半年起租 或 一年起租 互斥，则一年起租 或 半年起租 变成未选中状态，并从结果集移除
        var relative = val == '9-3' ? '9-4' : (val == '9-4' ? '9-3' : val);
        // console.info('relative=' + relative)
        // 遍历数组
        for (let i = 0; i < tempOptionArr.length; i++) {
            var tempOption = tempOptionArr[i]

            // 若是当前点击的，则是选中状态，并放进结果集
            if (tempOption.value == val) {
                //当前点击的位置为true即选中
                tempOption.check = true;
                resultArr.push(tempOption);
            } else if (tempOption.value == relative) {
                // 互斥方
                tempOption.check = false;
            } else if (tempOption.check) {
                // 其它已选中项 放进结果集，这样顺序就一致了
                resultArr.push(tempOption);
            }
        }
    }
}

function multiGroupClickVal(resultArr, resultValArr, tempOptionArr, checkFlag, val) {
    // 清空结果集
    resultArr.length = 0
    resultValArr.length = 0
    if (checkFlag) {
        // 多选数组中，选中时点击
        // 从结果集中剔除，状态需要变为false

        // 遍历数组
        for (let i = 0; i < tempOptionArr.length; i++) {
            var tempOption = tempOptionArr[i]
            console.info('tempOption=' + JSON.stringify(tempOption))
            // 若是当前点击的，则变成未选中状态，并从结果集中剔除
            if (tempOption.value == val) {
                //当前点击的位置为true即选中
                tempOption.check = false;
            } else if (tempOption.check) {
                // 其它已选中项 放进结果集，这样顺序就一致了
                resultArr.push(tempOption);
                resultValArr.push(tempOption.value);
            }
        }
    } else {
        // 多选数组中，未选中时点击
        // 放进结果集，状态需要变为true

        // 如果当前选中项 是 半年起租 或 一年起租 互斥，则一年起租 或 半年起租 变成未选中状态，并从结果集移除
        var relative = val == '9-3' ? '9-4' : (val == '9-4' ? '9-3' : val);
        // console.info('relative=' + relative)
        // 遍历数组
        for (let i = 0; i < tempOptionArr.length; i++) {
            var tempOption = tempOptionArr[i]

            // 若是当前点击的，则是选中状态，并放进结果集
            if (tempOption.value == val) {
                //当前点击的位置为true即选中
                tempOption.check = true;
                resultArr.push(tempOption);
                resultValArr.push(tempOption.value);
            } else if (tempOption.value == relative) {
                // 互斥方
                tempOption.check = false;
            } else if (tempOption.check) {
                // 其它已选中项 放进结果集，这样顺序就一致了
                resultArr.push(tempOption);
                resultValArr.push(tempOption.value);
            }
        }
    }
}

/**
 * 跳转打开目标页面
 * @param {发生源} e 
 * @param {跳转目标url} url 
 * @param {跳转方式} routeType 
 */
function navigateTo(e, url, routeType) {
    // console.info('地址=' + JSON.stringify(e))
    var routeTypeStr = routeType == undefined ? 'navigate' : routeType;
    wx.navigateTo({
        url: url,
        routeType: routeTypeStr,
        success(res) {
            console.info('跳转' + url + '成功，结果=' + JSON.stringify(res))
        },
        fail(e) {
            console.info('跳转' + url + '失败，结果=' + JSON.stringify(e))
        }
    })
}

/**
 * 跳转打开目标页面
 * @param {跳转目标url} url 
 * @param {跳转方式} routeType 
 */
function navigateTo2(url, routeType) {
    // console.info('地址=' + JSON.stringify(e))
    var routeTypeStr = routeType == undefined ? 'navigate' : routeType;
    wx.navigateTo({
        url: url,
        routeType: routeTypeStr,
        success(res) {
            console.info('跳转' + url + '成功，结果=' + JSON.stringify(res))
        },
        fail(e) {
            console.info('跳转' + url + '失败，结果=' + JSON.stringify(e))
        }
    })
}


/**
 * 创建从底部向上的动画弹窗
 */
function createAnimation() {
    /* 动画部分 */
    // 第1步：创建动画实例   
    var animation = wx.createAnimation({
        duration: 300,  //动画时长  
        timingFunction: "linear", //线性  
        delay: 0  //0则不延迟  
    });
    // 第2步：这个动画实例赋给当前的动画实例  
    // this.animation = animation;
    // 第3步：执行第一组动画  
    // animation.opacity(0).rotateX(-100).step();
    animation.opacity(0).translateY(400).step();
    return animation
}


/**
 * 批量清空缓存
 */
const keysToRemove = ['tempFeeLabelData', 'feeSelectLabelValArr', 'feeSelectLabelArr', 'strongPointSelectedLabelArr', 'strongPointSelectedValArr', 'amenitySelectedLabelArr', 'amenitySelectedValArr', 'tempLabelData'];
const doClearStorage = Promise.all(keysToRemove.map(key => {
    return new Promise((resolve, reject) => {
        wx.removeStorage({
            key: key,
            success: resolve('移除缓存成功'),
            fail: reject(new Error('移除缓存失败'))
        });
    });
}))

function clearBatchStorage(storageArr) {
    if (isNotArrayEmpty(storageArr)) {
        Promise.all(storageArr.map(key => {
            return new Promise((resolve, reject) => {
                wx.removeStorage({
                    key: key,
                    success: resolve('移除缓存成功'),
                    fail: reject(new Error('移除缓存失败'))
                });
            });
        }))
    }
}

function isNotArrayEmpty(arr) {
    return Array.isArray(arr) && arr.length > 0;
}

/**
 * 从数据库出来的url是网络图片，在编辑页面保存时需要本地图片，所以在这里做转换
 * @param {图片url} imgUrl 
 */
const new_p = (imgUrl) => {
    return new Promise((resolve, reject) => {
        wx.getImageInfo({
            src: imgUrl,
            success({ path }) {
                resolve(path)
            },
            fail(err) {
                reject(err)
            }
        })
    });
}

const checkUserCommon = (ip) =>{
    var targetUrl = '/pages/nuan/user/userInfo';
    checkUser(ip, targetUrl)
}

const checkUser = (ip, targetUrl) => {
    wx.request({
        url: 'http://' + ip + '/weixin/checkUser',
        method: 'POST',
        header: {
            'Authorization': wx.getStorageSync("token"),
            'content-type': 'application/json;charset=UTF-8'
        },
        data: {},
        success: res => { //wx.request成功的回调
            console.info('校验用户信息是否已完成，返回信息=' + JSON.stringify(res))
            if (res.statusCode == 200) {
                if (res.data.data == 0) {
                    wx.showToast({
                        title: '请先完善用户信息，才能发布房源/需求',
                        icon: 'none',
                        duration: 2000,
                        complete: function () {
                            setTimeout(function () {
                                wx.navigateTo({
                                    url: targetUrl,
                                })
                            }, 2000);
                        }
                    })
                }
            }
        }
    })
}

export default {
    radioGroupClick: radioGroupClick,
    radioGroupClickVal: radioGroupClickVal,
    multiGroupClick: multiGroupClick,
    multiGroupClickVal: multiGroupClickVal,
    navigateTo: navigateTo,
    navigateTo2: navigateTo2,
    createAnimation: createAnimation,
    doClearStorage: doClearStorage,
    clearBatchStorage: clearBatchStorage,
    new_p: new_p,
    checkUser: checkUser,
    checkUserCommon:checkUserCommon,
}